//================v3要点总结===============
/**
 * 1. 尝试位运算，官方题解，通过与1进行与操作，得到最低位的值，并将其移位至颠倒后对应的位置，再跟rev进行或运算
 * 2. 单元长度位最多只到总长度的一半
 *
 */

/**
 * @param {number} n - a positive integer
 * @return {number} - a positive integer
 */
var reverseBits = function (n) {
  const M1 = 0x55555555 // 01010101010101010101010101010101
  const M2 = 0x33333333 // 00110011001100110011001100110011
  const M4 = 0x0f0f0f0f // 00001111000011110000111100001111
  const M8 = 0x00ff00ff // 00000000111111110000000011111111

  // 单元长度1，交换奇数位与偶数位
  n = ((n >>> 1) & M1) | ((n & M1) << 1)
  // 单元长度2，交换奇数位与偶数位
  n = ((n >>> 2) & M2) | ((n & M2) << 2)
  // 单元长度4，交换奇数位与偶数位
  n = ((n >>> 4) & M4) | ((n & M4) << 4)

  // 单元长度8，交换奇数位与偶数位
  n = ((n >>> 8) & M8) | ((n & M8) << 8)
  return ((n >>> 16) | (n << 16)) >>> 0
}

// 作者：LeetCode-Solution
// 链接：https://leetcode-cn.com/problems/reverse-bits/solution/dian-dao-er-jin-zhi-wei-by-leetcode-solu-yhxz/
// 来源：力扣（LeetCode）
// 著作权归作者所有。商业转载请联系作者获得授权，非商业转载请注明出处。

console.log(reverseBits(11))
